package es.uma.scgt.modelo;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Table (name = "Historico"
)
public class Historico implements Serializable{

		/**
	 * 
	 */
	private static final long serialVersionUID = 6519964486101523784L;
	
		@Id
		@GeneratedValue
		@Column(name = "id")
		private Integer id;
		
		//Join usuario ManyToOne
		@ManyToOne(fetch = FetchType.EAGER)
		@JoinColumn(name = "id", nullable = false)
		private Usuario usuarioModificacion;
		
		@NotNull
		@Column(name = "fModificacion")
		private Date fechaModificacion;
		
		//Join Tarea ManytoOne
		@ManyToOne(fetch = FetchType.EAGER)
		@JoinColumn(name = "id", nullable = false)
		private Tarea tarea;
		
		//Join usuario ManyToOne
		@ManyToOne(fetch = FetchType.EAGER)
		@JoinColumn(name = "id", nullable = false)
		private Usuario usuario;
		
		//Join Enumerado Prioridad
		@Enumerated(EnumType.STRING)
		private Prioridad prioridad;
		
		/**
		 * @return the id
		 */
		public Integer getId() {
			return id;
		}

		/**
		 * @param id the id to set
		 */
		public void setId(Integer id) {
			this.id = id;
		}

		/**
		 * @return the usuarioModificacion
		 */
		public Usuario getUsuarioModificacion() {
			return usuarioModificacion;
		}

		/**
		 * @param usuarioModificacion the usuarioModificacion to set
		 */
		public void setUsuarioModificacion(Usuario usuarioModificacion) {
			this.usuarioModificacion = usuarioModificacion;
		}

		/**
		 * @return the fechaModificacion
		 */
		public Date getFechaModificacion() {
			return fechaModificacion;
		}

		/**
		 * @param fechaModificacion the fechaModificacion to set
		 */
		public void setFechaModificacion(Date fechaModificacion) {
			this.fechaModificacion = fechaModificacion;
		}

		/**
		 * @return the tarea
		 */
		public Tarea getTarea() {
			return tarea;
		}

		/**
		 * @param tarea the tarea to set
		 */
		public void setTarea(Tarea tarea) {
			this.tarea = tarea;
		}

		/**
		 * @return the usuario
		 */
		public Usuario getUsuario() {
			return usuario;
		}

		/**
		 * @param usuario the usuario to set
		 */
		public void setUsuario(Usuario usuario) {
			this.usuario = usuario;
		}

		/**
		 * @return the prioridad
		 */
		public Prioridad getPrioridad() {
			return prioridad;
		}

		/**
		 * @param prioridad the prioridad to set
		 */
		public void setPrioridad(Prioridad prioridad) {
			this.prioridad = prioridad;
		}

		/**
		 * @return the fase
		 */
		public Fase getFase() {
			return fase;
		}

		/**
		 * @param fase the fase to set
		 */
		public void setFase(Fase fase) {
			this.fase = fase;
		}

		//Join Enumerado Fase
		@Enumerated(EnumType.STRING)
		private Fase fase;

		/* (non-Javadoc)
		 * @see java.lang.Object#hashCode()
		 */
		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result + ((fase == null) ? 0 : fase.hashCode());
			result = prime
					* result
					+ ((fechaModificacion == null) ? 0 : fechaModificacion
							.hashCode());
			result = prime * result + id;
			result = prime * result
					+ ((prioridad == null) ? 0 : prioridad.hashCode());
			result = prime * result + ((tarea == null) ? 0 : tarea.hashCode());
			result = prime * result
					+ ((usuario == null) ? 0 : usuario.hashCode());
			result = prime
					* result
					+ ((usuarioModificacion == null) ? 0 : usuarioModificacion
							.hashCode());
			return result;
		}

		/* (non-Javadoc)
		 * @see java.lang.Object#equals(java.lang.Object)
		 */
		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Historico other = (Historico) obj;
			if (fase != other.fase)
				return false;
			if (fechaModificacion == null) {
				if (other.fechaModificacion != null)
					return false;
			} else if (!fechaModificacion.equals(other.fechaModificacion))
				return false;
			if (id != other.id)
				return false;
			if (prioridad != other.prioridad)
				return false;
			if (tarea == null) {
				if (other.tarea != null)
					return false;
			} else if (!tarea.equals(other.tarea))
				return false;
			if (usuario == null) {
				if (other.usuario != null)
					return false;
			} else if (!usuario.equals(other.usuario))
				return false;
			if (usuarioModificacion == null) {
				if (other.usuarioModificacion != null)
					return false;
			} else if (!usuarioModificacion.equals(other.usuarioModificacion))
				return false;
			return true;
		}
		
		
}
